package 富婆梦.第一阶段.Java基础视频学习.Scoket知识点.TCP图片上传服务器;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.Scoket知识点.TCP图片上传服务器
 * @ClassName: TCPServer
 * @Author: hemengjin
 * @Description: 服务器可以随时接受客户端上传的图片
 * *  TCP图片上传服务器
 * *   1. ServerSocket套接字对象,监听端口8000
 * *   2. 方法accept()获取客户端的连接对象
 * *   3. 客户端连接对象获取字节输入流,读取客户端发送图片
 * *   4. 创建File对象,绑定上传文件夹
 * *       判断文件夹存在, 不存,在创建文件夹
 * *   5. 创建字节输出流,数据目的File对象所在文件夹
 * *   6. 字节流读取图片,字节流将图片写入到目的文件夹中
 * *   7. 将上传成功会写客户端
 * *   8. 关闭资源
 * @Date:2021/11/10 21:12
 * @Version: 1.0
 */
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //起一个服务，设置端口号
        ServerSocket serverSocket = new ServerSocket(8888);
        //获得客户端连接
        Socket socket = serverSocket.accept();
        // 拿到socket连接里面，读文件的流
        InputStream inputStream = socket.getInputStream();
        //创建File对象，要将读到的文件存在本地文件夹内
        File file = new File("C:\\Users\\18279\\Pictures\\Camera Roll");
        //防止文件同名被覆盖,从新定义文件名字
        //规则:  域名+毫秒值+6位随机数
        String fileName = "meng"+System.currentTimeMillis()+new Random().nextInt(99999)+".jpg";
        FileOutputStream fileOutputStream = new FileOutputStream(file+"\\"+fileName);

        //读数据
        byte[] data = new byte[1024];
        while (inputStream.read(data)!=-1){
            fileOutputStream.write(data);
        }

        //读到数据之后，给客户端一个提示
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("我已经收到了！谢谢你哦~".getBytes());

        fileOutputStream.close();
        socket.close();
        serverSocket.close();
    }
}
